package dblayer

import (
	mydb "easycharts/db/mysql"
	"easycharts/model"
	"easycharts/utils/errmsg"
	"fmt"
)

func InputDiscuss(data *model.Discuss) int {
	fmt.Println("执行sql语句：什么也不做")
	return errmsg.SUCCSE
}

func InputPost(data *model.Post) int {
	// 准备预处理sql语句
	// 根据参数插入员工表
	stmt, err := mydb.DBConn().Prepare("insert into post(`postId`, `content`, `tagId`, `config`, " +
	"`postTime`, `userId`)" +
		"values(?, ?, ?, ?, ?)")
	// 预处理失败的错误处理
	if err != nil {
		fmt.Println("Failed to insert, err", err.Error())
		return errmsg.ERROR
	}
	// 最后执行完成后关闭连接
	defer stmt.Close()

	// 传入参数执行sql语句
	_, err = stmt.Exec(data.Content, data.TagId, data.Config, data.PostTime, data.UserId)
	if err != nil {
		fmt.Println("Failed to insert, err", err.Error())
		return errmsg.ERROR
	}
	return errmsg.SUCCSE
}

func InputUser(data *model.User) int {
	// 准备预处理sql语句
	// 根据参数插入员工表
	stmt, err := mydb.DBConn().Prepare("insert into user(`UserName`, `password`, " +
	" `userTime`, `nanoid`)" +
		"values(?, ?, ?, ?)")
	// 预处理失败的错误处理
	if err != nil {
		fmt.Println("Failed to insert, err", err.Error())
		return errmsg.ERROR
	}
	// 最后执行完成后关闭连接
	defer stmt.Close()

	// 传入参数执行sql语句
	_, err = stmt.Exec(data.Username, data.Password, data.UserTime, data.NanoId)
	if err != nil {
		fmt.Println("Failed to insert, err", err.Error())
		return errmsg.ERROR
	}
	return errmsg.SUCCSE
}




// template

// 录入员工基本信息
func InputWorker(data *model.Worker) int {
	// 准备预处理sql语句
	// 根据参数插入员工表
	stmt, err := mydb.DBConn().Prepare("insert into worker(`id`, `name`, `sex`, `role`) " +
		"values(?, ?, ?, ?)")
	// 预处理失败的错误处理
	if err != nil {
		fmt.Println("Failed to insert, err", err.Error())
		return errmsg.ERROR
	}
	// 最后执行完成后关闭连接
	defer stmt.Close()

	// 传入参数执行sql语句
	_, err = stmt.Exec(data.Id, data.Name, data.Sex, data.Role)
	if err != nil {
		fmt.Println("Failed to insert, err", err.Error())
		return errmsg.ERROR
	}
	return errmsg.SUCCSE
}


// 分配司机，封装事务:
// 首先插入woker表
// 然后插入driver_route表，分配工作
func InputDriver(data *model.Driver) int {
	// 调用后台数据库的存储过程, "?"表示带传入参数，后面拼接成SQL语句
	stmt, err := mydb.DBConn().Prepare("call input_driver(?, ?, ?, ?, ?, ?)")
	if err != nil {
		fmt.Println("Failed to insert, err", err.Error())
		return errmsg.ERROR
	}
	// 函数执行完后断开数据库连接
	defer stmt.Close()
	code := 0
	// 传入参数，动态嵌入式SQL
	err = stmt.QueryRow(data.Id, data.Name, data.Sex, data.Role, data.Tid, data.Rid).Scan(&code)
	// 错误检查，错误代码是1
	if code == 1 {
		fmt.Println("Failed to insert, err")
		return errmsg.ERROR
	}
	// 错误检查
	if err != nil {
		fmt.Println("Failed to insert, err", err.Error())
		return errmsg.ERROR
	}
	return errmsg.SUCCSE
}

func InputBus(data *model.Car) int {
	// 预备sql语句，检查语法错误
	stmt, err := mydb.DBConn().Prepare("insert into buses(`cno`,`cid` , `csize`, `rid`) " +
		"values(?, ?, ?, ?)")
	if err != nil {
		fmt.Println("Failed to insert, err", err.Error())
		return errmsg.ERROR
	}
	defer stmt.Close()

	// 执行sql语句，使用请求的数据信息插入操作
	_, err = stmt.Exec(data.Cno, data.Cid, data.Csize, data.Rid)
	if err != nil {
		fmt.Println("Failed to insert, err", err.Error())
		return errmsg.ERROR
	}
	return errmsg.SUCCSE
}

func InputViolation(data *model.VioRecord) int {
	// SQL语句预处理
	// 预备向vioRecord表中插入信息
	stmt, err := mydb.DBConn().Prepare("insert into viorecords(`id`, `date`, `site`, `vtype`, `rid`, `tid`, `cno`) " +
		"values(?, ?, ?, ?, ?, ?, ?)")
	if err != nil {
		fmt.Println("Failed to insert, err", err.Error())
		return errmsg.ERROR
	}
	defer stmt.Close()

	// 执行插入语句
	// fmt.Println("Formated: ", data.Date.Format())
	_, err = stmt.Exec(data.Id, data.Datetime, data.Site, data.Vtype, data.Rid,
				data.Tid, data.Cno)
	if err != nil {
		fmt.Println("Failed to insert, err", err.Error())
		return errmsg.ERROR
	}
	return errmsg.SUCCSE
}
